//
//  LBWebView.h
//  LBWebView
//
//  Created by WuShiHai on 19/5/24.
//  Copyright (c) 2019 Lebbay. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <WebKit/WebKit.h>
#import "LBWebViewConfigurationHeader.h"

NS_ASSUME_NONNULL_BEGIN

/**
 JS调原生传递的字符串，解析后为此model
 */
@interface LBWebViewBridge : NSObject

/**
 调用的key，用于唯一确认每次调用
 */
@property (nonatomic, strong) NSString *key;

/**
 JS调用的method
 */
@property (nonatomic, strong) NSString *method;

/**
 回调方法名
 */
@property (nonatomic, strong) NSString *callback;

/**
 用于存放交互中存在的大数据，为字典格式
 */
@property (nonatomic, strong) NSDictionary<NSString *, NSObject *> *parameters;

@end

@class LBWebView;
@protocol LBWebViewDelegate <NSObject>

@required

/**
 webview是否允许加载此次请求，由应用层判断

 @param webView 实例
 @param request 请求地址
 @return 是否允许
 */
- (BOOL)LBWebView:(LBWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request;

/**
 webView收到JS调用原生方法的请求

 @param webView 实例
 @param message 调用方法对象 ,调用方法后，如果需要传递给H5，回调bridge_${method}(${returnValue})
 */
- (void)LBWebView:(LBWebView *)webView didReceiveMessage:(LBWebViewBridge *)message;

@optional

/**
 开始加载回调

 @param webView 实例
 */
- (void)LBWebViewDidStartLoad:(LBWebView *)webView;

/**
 加载成功回调

 @param webView 实例
 */
- (void)LBWebViewDidFinishLoad:(LBWebView *)webView;

/**
 加载失败回调

 @param webView 实例
 @param error 错误描述
 */
- (void)LBWebView:(LBWebView *)webView didFailLoadWithError:(NSError *)error;

@end

/**
 H5容器
 */
@interface LBWebView : WKWebView

/**
 初始化方法

 @param frame frame
 @param delegate 代理
 @return 实例
 */
- (instancetype)initWithFrame:(CGRect)frame
                     delegate:(id<LBWebViewDelegate>)delegate;

@end


NS_ASSUME_NONNULL_END
